// import { transform, getTransform } from 'ol/proj' // 坐标转换

export default {
  data () {
    return {
      // oMap: null, // 地图对象;    简写对照 overlay[ovl], arrow[arw], sprite[spt], Endpoint[ept]
      // sSRS: 'EPSG:4326' // 空间参照系（Spatial Reference System); 表示使用的数据的坐标系，和地图用的RCS不是同一个
    }
  },
  watch: {
    // watch
  },
  mounted () {
    // mounted
  },
  methods: {
    /**
     * @description 计算两个点长度
     * @param {Array} p1 第一个点的坐标
     * @param {Array} p2 第二个点的坐标
     * @return {float} len 连点的长度
     */
    CalLengthOfTwoPoints (p1, p2) {
      let len = 0
      len = Math.sqrt(Math.pow((p1[0] - p2[0]), 2) + Math.pow((p1[1] - p2[1]), 2))
      return len
    },

    /**
     * @description 已知等腰三角形两底角坐标和高，求顶角坐标(贝塞尔曲线控制点)
     * @param {Array} p1 等腰三角形第一个点底角的坐标[x,y]
     * @param {Array} p2 等腰三角形第二个点底角的坐标[x,y]
     * @param {float} H 等腰三角形高
     * @return {Array} 点坐标
     */
    getCtrlPointOfTwoPoints (p1, p2, H) {
      const x1 = p1[0]
      const y1 = p1[1]
      const x2 = p2[0]
      const y2 = p2[1]
      const cpx = (x1 + x2) / 2 // 获取两个点的x的中心位置
      const cpy = (y1 + y2) / 2
      const dx = x2 - x1 // 获取两点间x长度
      const dy = y2 - y1
      const xFactor = Math.sqrt(Math.pow(dx / dy, 2) + 1)
      const yFactor = Math.sqrt(Math.pow(dy / dx, 2) + 1)
      const x3 = cpx + H / xFactor // 可以获得两个值+ -，这里使用了+
      const y3 = cpy - H / yFactor // 可以获得两个值- +，这里使用了- （与上面配套）
      return [x3, y3]
    },

    /**
     * @description 求阶乘
     * @param {int} n 获取n的阶乘
     * @return {int} 返回n的阶乘
     */
    getFactorial (n) {
      let num = 1
      for (var i = 1; i <= n; i++) {
        num *= i
      }
      return num
    },
    /**
     * @description 求二项式因子
     * @param {int} n n阶
     * @param {int} index 索引（当前阶-- 0 ~ n）
     * @return {int} 返回当前二项式因子
     */
    getBinomialFactor (n, index) {
      let num = 0.0
      num = this.getFactorial(n) / (this.getFactorial(index) * this.getFactorial(n - index))
      return num
    },
    /**
     * @description 获取贝塞尔曲线（点序列）
     * @param {Array} aPoints 绘制贝塞尔曲线的点
     * @return {Array} 贝塞尔曲线点数组
     */
    getBezierPoints (aPoints) {
      if (aPoints.length <= 2) {
        return aPoints
      }
      const list = [] // new Array() 用来保存贝塞尔曲线的点坐标（返回）
      const n = aPoints.length - 1
      // 根据贝塞尔曲线公式计算坐标
      for (let i = 0.0; i <= 1.0; i += 0.01) {
        let x = 0.0
        let y = 0.0
        for (var j = 0; j <= n; j++) {
          const num6 = this.getBinomialFactor(n, j)
          const num7 = Math.pow(i, j)
          const num8 = Math.pow(1.0 - i, (n - j))
          x += ((num6 * num7) * num8) * aPoints[j][0]
          y += ((num6 * num7) * num8) * aPoints[j][1]
        }
        list.push([x, y])
      }
      list.push(aPoints[n]) // 添加最后一个点的坐标
      return list
    }
  }
}
